package 简单.双指针;

import java.util.Arrays;

/**
 * 给你一个整数数组 nums，将 nums 中的的所有偶数元素移动到数组的前面，后跟所有奇数元素。
 * <p>
 * 返回满足此条件的 任一数组 作为答案。
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/sort-array-by-parity/
 */
public class 按奇偶排序数组_905 {

    public static void main(String[] args) {

        int[] nums = {3, 1, 2, 4};
        System.out.println(Arrays.toString(sortArrayByParity2(nums)));

    }

    /**
     * 两次遍历
     *
     * @param nums
     * @return
     */
    public static int[] sortArrayByParity(int[] nums) {
        int[] sortNums = new int[nums.length];
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] % 2 == 0) {
                sortNums[index] = nums[i];
                index++;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] % 2 != 0) {
                sortNums[index] = nums[i];
                index++;
            }
        }
        return sortNums;
    }

    /**
     * 一次遍历+双指针
     * 碰到双数放前面，单数放后面
     *
     * @param nums
     * @return
     */
    public static int[] sortArrayByParity2(int[] nums) {
        int[] sortNums = new int[nums.length];
        int left = 0, right = nums.length - 1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] % 2 == 0) {
                sortNums[left] = nums[i];
                left++;
            } else {
                sortNums[right] = nums[i];
                right--;
            }
        }
        return sortNums;
    }

}
